export default class MySet {
  constructor() {
    this.items = {};
  }

  /**
   * 查询集合中是否包含该元素
   * @param {*} value 要查询的元素
   * @returns {boolean}
   */
  has(value) {
    return Object.prototype.hasOwnProperty.call(this.items, value);
  }

  /**
   * 向集合中添加元素
   * @param {*} value 需要添加的元素
   * @returns {MySet}
   */
  add(value) {
    if (!this.has(value)) {
      this.items[value] = value;
    }

    return this;
  }

  /**
   * 删除指定元素，如果存在则返回true，否则返回false
   * @param {*} value 需要删除的元素
   * @returns {boolean}
   */
  delete(value) {
    if (this.has(value)) {
      delete this.items[value];
      return true;
    }

    return false;
  }

  /**
   * 清空集合
   */
  clear() {
    this.items = {};
  }

  /**
   * 获取集合大小
   * @returns {number}
   */
  size() {
    return Object.keys(this.items).length;
  }

  /**
   * 以数组形式返回集合
   * @returns {*[]}
   */
  values() {
    return Object.values(this.items);
  }
}
